package com.itheima.dubbo.mysql.impl;


import com.alibaba.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.itheima.commons.model.domain.UserQuestionnaire;
import com.itheima.dubbo.interfaces.UserQuestionnaireApi;
import com.itheima.dubbo.mysql.mapper.UserQuestionnaireMapper;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.List;

/**
 * 用户进度表
 */
@Service
public class UserQuestionnaireApiImpl implements UserQuestionnaireApi {

    @Autowired
    private UserQuestionnaireMapper userQuestionnaireMapper;

    /**
     * 根据用户id获取该用户的问卷详情
     *
     * @param userId
     * @return
     */
    @Override
    public List<UserQuestionnaire> queryByUserId(Long userId) {
        return userQuestionnaireMapper.selectList(Wrappers.lambdaQuery(UserQuestionnaire.class)
                .eq(UserQuestionnaire::getUserId, userId));
    }

    @Override
    public void save(UserQuestionnaire userQuestionnaire) {
        userQuestionnaireMapper.insert(userQuestionnaire);
    }

    /**
     * 根据用户id，卷子id，修改分数
     *
     * @param userId
     * @param qid
     * @param score
     */
    @Override
    public void updataScore(Long userId, Long qid, Long score) {
        userQuestionnaireMapper.update(UserQuestionnaire
                .builder()
                .userId(userId)
                .qid(qid)
                .score(score)
                .build(), Wrappers
                .lambdaQuery(UserQuestionnaire.class).
                        eq(UserQuestionnaire::getUserId, userId)
                .eq(UserQuestionnaire::getQid, qid));
    }

    /**
     * 根据卷子id和用户id，获取该值
     *
     * @param qid
     * @return
     */
    @Override
    public UserQuestionnaire queryByQid(Long userId, Long qid) {
        UserQuestionnaire userQuestionnaire = userQuestionnaireMapper.selectOne(Wrappers
                .lambdaQuery(UserQuestionnaire.class)
                .eq(UserQuestionnaire::getUserId, userId)
                .eq(UserQuestionnaire::getQid, qid));
        return userQuestionnaire;
    }

    /**
     * 根据卷子id和用户id，修改锁
     * @param userQuestionnaire
     */
    @Override
    public void updataIsLock(UserQuestionnaire userQuestionnaire) {
        userQuestionnaireMapper.update(
                userQuestionnaire, Wrappers
                .lambdaQuery(UserQuestionnaire.class)
                .eq(UserQuestionnaire::getUserId, userQuestionnaire.getUserId())
                .eq(UserQuestionnaire::getQid, userQuestionnaire.getQid()));
    }

    /**
     * 修改性格
     *
     * @param userQuestionnaire
     */
    @Override
    public void updataConclusionId(UserQuestionnaire userQuestionnaire) {
        userQuestionnaireMapper.update(userQuestionnaire
                , Wrappers
                        .lambdaQuery(UserQuestionnaire.class)
                        .eq(UserQuestionnaire::getUserId, userQuestionnaire.getUserId())
                        .eq(UserQuestionnaire::getQid, userQuestionnaire.getQid()));
    }

    /**
     * 通过类型id，将同卷子相同类型的用户查出来
     *
     * @param userId
     * @param qid         卷子id
     * @param characterId 类型id
     * @return
     */
    @Override
    public List<UserQuestionnaire> queryAllByCharacterId(Long userId, long qid, Long characterId) {
        List<Long> ids = new ArrayList<>();
        ids.add(userId);

        List<UserQuestionnaire> userQuestionnaires = userQuestionnaireMapper.selectList(Wrappers
                .lambdaQuery(UserQuestionnaire.class)
                .eq(UserQuestionnaire::getQid, qid)
                .eq(UserQuestionnaire::getCharacterId, characterId)
                .notIn(UserQuestionnaire::getUserId, ids));
        return userQuestionnaires;
    }
}
